#include "ficheros_basicos.h"

int tamMB(unsigned int bloques){
	/* Calcula el tamaño (en bytes) del mapa de bits de una forma muy simple:
	 * reserva un bit por cada bloque que hay en el sistema.
	 * 
	 * Se podría mejorar pensando que los bloques ocupados por 
	 * el superbloque, el mapa de bits y el array de inodos
	 * siempre estarán ocupados */

	return bloques*BLOQSIZE; 
}

int tamAI(unsigned int bloques){
	/* Calcula el tamaño (en bytes) que tendrá el array de inodos en base al tamaño
	 * de espacio "libre" (es decir, no ocupado ni por el superbloque
	 * ni por el mapa de bits) que tenemos en nuestra partición */

	int tam_utilizado=sizeof(struct superbloque)+tamMB(bloques); // Numero de bytes ocupado por el superbloque+mapa de bits
	return ((bloques*BLOQSIZE-tam_utilizado)/(FILESIZE_AVG*BLOQSIZE))*sizeof(struct inodo)/BLOQSIZE+1; // Tamaño del array de inodos
}

int initSB(struct superbloque* sb) {
	/* Inicializa el superbloque */

	return bwrite(0,sb);
}

int initMB(unsigned int bloques){
	/* Inicializa el Mapa de Bits */

	char buffer[BLOQSIZE];
	int i;
	int tamMBb=tamMB(bloques)/BLOQSIZE+1; // Numero de bloques que ocupa el mapa de bits, el +1 es porque la división es entera, y se necesita un bloque para almacenar esos bits que no ocupan un bloque entero.
	memset(buffer,0,BLOQSIZE);
	for (i=0;i<tamMBb;i++){
		bwrite(1+i,buffer);
	}
}
